var TwinklGame = TwinklGame || {}; (function (TwinklGame, manifest) { //CHANGE FONT SIZE ------------------------------------------------------------------------------------------------------------------------ var theWidth, minWidth = 1184, screenIsSmall = true, isFullscreen = false, fontArr = [ //{element:'.title-text', size_sm:'13vw', size_lg: '400px'}, {element:'.font-button', size_sm:'4vw', size_lg: '58px'}, {element:'.sub-heading', size_sm:'3vw', size_lg: '48px'}, {element:'.jodal-title', size_sm:'5vw', size_lg: '65px'}, {element:'.jodal-text', size_sm:'2.6vw', size_lg: '25px'}, {element:'.text-button', size_sm:'3vw', size_lg: '35px'}, {element:'.word-mat-label', size_sm:'1.8vw', size_lg: '50px'} //ADD IN ANY TEXT TO MAKE SURE IT RESPONDS CORRECTLY ]; function resizeScreen(){ theWidth = $('body').width(); var smallDisplay = true; theWidth >= minWidth && (smallDisplay = false); isFullscreen && (smallDisplay = true); if (smallDisplay != screenIsSmall) { screenIsSmall = !screenIsSmall; $.each(fontArr, function(key, value){ var newSize = smallDisplay ? value.size_sm : value.size_lg; $(value.element).css('font-size', newSize); }); } //ADD IN ANYTHING ELSE THAT NEEDS TO RESPOND DIFFERENTLY(CIRCLE BUTTONS ETC) } //AUDIO SAMPLES---------------------------------------------------------------------------------------------------------------------------------------------- var buttonClickAudio = new Howl({src: [manifest.buttonClick.src]}), correctAnswerSoundAudio = new Howl({src: [manifest.correctAnswerSound.src]}), wrongAnswerAudio = new Howl({src: [manifest.wrongAnswerSound.src]}), swooshAudio = new Howl({src: [manifest.swoosh.src]}); //------------------------------------------------------------------------------------------------------------------------------------------------------------ TwinklGame.setup = function (config) { resizeScreen(); $(window).resize(resizeScreen); $(window).resize(textResize); $(window).resize(changeTextOfUnloaded); //SEARCH FOR SUPERSCRIPT config.cards.forEach(function(e,elem){ config.title = detectFraction(config.title); config.cards[elem].word = detectFraction(config.cards[elem].word); }); // VARIABLES----------------------------------------------------------------------------------------------------------------------------------------------- var wholeDocument = $("#word-mat-container"), allPages = $(".pages"), titlePage = $("#titlePage"), instructionsPage = $("#instructionsPage"), mainPage = $("#mainPage"), soundToggle = $(".sound-toggle"), navBar = $(".go-nav-panel"), fullScreen = $("#fullscreen-button"), titleText = $("#title"), subHeading = $("#subContainer"), allInstructions = $(".allInstructions"), closeButton = $("#close-button"), letsGo = $("#lets-go-button"), playButton = $("#playButton"), instructionsPanel = $("#instructionsPanel"), wellDonePage = $("#well-done"), wellDoneTitle = $('#isItCorrect'), wellDoneText = $('#answerWasText'), checkButton = $("#check-button"), introTitle = $("#intro-title-text"), playAgainButton = $("#play-again"); //SETUP BACKGROUND IMAGE & ALL TEXT------------------------------------------------------------------------------------------------------------------------ config.cards.forEach(function(e,p){ e.id = p; }); wholeDocument.css({ "background-image": "url(" + TwinklGame.Utils.getConfigAssetUrl(config.background_image_url) + ")" }); wholeDocument.addClass('interactive-theme-' + config.theme_colour); titleText.html(config.title); subHeading.html(config.sub_title); introTitle.html(config.intro_title); allInstructions.html(config.intro_text); wellDoneTitle.html(config.success_title); wellDoneText.html(config.success_text); closeButton.hide(); $(".fit-me-button").html(config.lets_go_text); checkButton.html(config.check_button_text); playButton.html(config.play_button_text); playAgainButton.html(config.play_again_button_text); wholeDocument.addClass(config.branding+"-branding"); if(config.branding =="twinkl"){ $(".main-twinkl-logo").show(); } else if(config.branding=="beyond"){ wholeDocument.css('font-family', '"roboto" !important'); $(".main-twinkl-logo").hide(); $(".beyond-twinkl-logo").show(); } titleText.widowFix(); //todo put in fittext // testFontSize(titleText,180); //testFontSize($(".fit-me-button"),50); textResize(); hidePages(); function hidePages(){ allPages.hide(); titlePage.show(); } //ADD ANY ELEMENTS IN HERE YOU WANT TO REMOVE WIDOWS FROM--------------------------------------------------------------------------------------------------- //INSERT ANYTHING THAT NEEDS TO FIT TO CONTAINER------------------------------------------------------------------------------------------------------------ function textResize(){ testFontSize(titleText,180); testFontSize($(".fit-me-button"),150); } //START GAME------------------------------------------------------------------------------------------------------------------------------------------------ letsGo.click(function(){ swooshAudio.play(); instructionsPage.show(); instructionsPanel.css({'top':'100%'}).animate({'top':'15%'},500,"easeOutBack"); titlePage.hide(); }); //PLAY BUTTON----------------------------------------------------------------------------------------------------------------------------------------------- playButton.click(function(){ buttonClickAudio.play(); instructionsPage.hide(); mainPage.show(); invertNav(); textResize(); changeTextOfUnloaded(); }); //PLAY AGAIN BUTTON-------------------------------------------------------------------------------------------------------------------------------------------- $("#play-again").click(function(){ buttonClickAudio.play(); allPages.hide(); mainPage.show(); resetGame(); textResize(); changeTextOfUnloaded(); }); //INSERT GAME CODE HERE ************************************************************************************************************************************** var beingDragged; var a = 3; //SORT OUT ARRAYS //CREATE LABELS resetGame(); function resetGame(){ var newArray = $.extend(true, [], config.cards); //NEW ARRAY FROM CONFIG TwinklGame.Utils.shuffleArray(newArray); //SHUFFLE ARRAY newArray = newArray.slice(0, 9); //CUT TO 9 ITEMS FROM ARRAY $(".word-mat-label").remove(); //REMOVE ANY CURRENT LABELS for(var i =1; i<=9;i++){ var f = (i-1); var markupCode = "
"+ newArray[f].word +"
"; $("#list-of-words").prepend(markupCode); } //CHANGE Z-INDEX ORDER ON CLICK $(".word-mat-label").mousedown(function(){ $(".word-mat-label").css({"z-index":"10"}); $(this).css({"z-index":"100"}); var num = $(this).attr("data-num"); var audio = search(num,config.cards); console.log(audio,"RATS") if(audio){ var newAudio1 = new Howl({src: audio}); newAudio1.play(); }else{ // buttonClickAudio.play(); } }); //CHECK function search(nameKey, myArray){ for (var i=0; i < myArray.length; i++) { if (myArray[i].id == nameKey && myArray[i].audio) { if(myArray[i].audio.assetUrl.length>0){ return myArray[i].audio.assetUrl; }else { return false; } } } } $(".word-mat-label").draggable({ revert : true, drag: function(ev, ui) { beingDragged = $(this).parent(); $(this).css("z-index", a++); }, }); $('.drop-area').droppable({ drop: function(ev, ui) { $(ui.draggable).detach().css({top: 0,left: 0}).appendTo(this); if(beingDragged.hasClass("grid-item-left")){ $(ui.draggable).siblings().removeClass('word-label-active'); } $(ui.draggable).addClass('word-label-active'); $(ui.draggable).siblings().detach().css({top: 0,left: 0}).appendTo(beingDragged); } }); $('.grid-item-left').droppable({ drop: function(ev, ui) { $(ui.draggable).detach().css({top: 0,left: 0}).prependTo(this); $(ui.draggable).removeClass('word-label-active'); } }); TwinklGame.Utils.shuffleArray(newArray); //SHUFFLE ARRAY for(var i =1; i<=9;i++){ //ADD ID TO DROP AREA var f = (i-1); $("#grid-item-"+i).attr('data-id', newArray[f].title); $("#grid-item-"+i + " .image-area").css({ "background-image": "url(" + TwinklGame.Utils.getConfigAssetUrl(newArray[f].image) + ")" }); } changeTextOfUnloaded(); //FIT TEXT TO BOX } $(".label-check-button").click(function(){ checkAnswers(); }); function checkAnswers(){ var totalCorrect =0; for(var i =1; i<=9;i++){ var f = (i-1); if($("#grid-item-"+i).attr('data-id')== $("#grid-item-"+i+ " .word-mat-label").attr('data-id')){ totalCorrect++ //ADD TO TOTAL SCORE }else{ $("#grid-item-"+i+ " .word-mat-label").removeClass('word-label-active'); $("#grid-item-"+i+ " .word-mat-label").prependTo($("#list-of-words")); //MOVE BACK TO LIST } } if(totalCorrect==9){ buttonClickAudio.play(); $(".pages").hide(); wellDonePage.show(); wellDonePage.css({'top':'100%'}).animate({'top':'15%'},500,"easeOutBack"); }else{ wrongAnswerAudio.play(); } } function changeTextOfUnloaded(){ for(var i=1;i<=9;i++){ // console.log($("#inner-text-"+i).height(),$("#inner-text-"+i).width()) testFontSize($("#inner-text-"+i),100); } } //NAVIGATION FUNCTIONS ************************************************************************************************************** function detectFraction(superChar) { //console.log(superChar,"YEs") // var split = superChar.split(/(?=\[)|(?<=\])/); //SPLIT BY [] var split = splitBetween(superChar,"[","]") //FOR EACH SPLIT IN THE TEXT (EACH SUM) split.forEach(function (e, index) { if (e.includes("[")) { var without = e.substring(1); without = without.substring(0, without.length - 1); //TAKE OFF END CHARACTERS // var array = without.split(/(?' +array.join("") + ''; }else{ split[index] = '' +split[index] + ''; } }); return '
' +split.join("") + '
'; } function splitBetween(array,char1,char2){ var newArray =[]; var marker; for(var i=0;i<=array.length;i++){ if(array[i]===char1 ){ newArray.push(array.slice(marker,i)); marker =i; } else if(array[i]===char2 ){ newArray.push(array.slice(marker,(i+1))); marker =(i+1); } else if(i===(array.length)){ newArray.push(array.slice(marker,i)); } } return newArray; } function splitAll(array,char1,char2,char3,char4){ var newArray =[]; var marker=0; for(var i=0;i<=array.length;i++){ if(array[i]===char1 ){ newArray.push(array.slice(marker,i)); //( newArray.push(array.slice(i,i+1)); //( marker =i+1; } else if(array[i]===char2 ){ newArray.push(array.slice(marker,i)); //( newArray.push(array.slice(i,i+1)); //( marker =i+1; } else if(array[i]===char3 ){ newArray.push(array.slice(marker,i)); //( newArray.push(array.slice(i,i+1)); //( marker =i+1; } else if(array[i]===char4 ){ newArray.push(array.slice(marker,i)); //( newArray.push(array.slice(i,i+1)); //( marker =i+1; } else if(i===(array.length)){ newArray.push(array.slice(marker,i)); } } return newArray; } function changeArray(array){ array.forEach(function(e,index){ if(e=="^"){ array[index]=""; array = searchStopForward("^",array,index); }else if(e=="/"){ array[index] = "
"; array = searchStopForward("/",array,index); array = searchStopBack("/",array,index); }else{ array[index]= detectAlgebra(array[index],array[index+1]); } array=array }); //REMOVE BRACKETS array.forEach(function(e,index){if(e=="(" || e==")"){array.splice(index, 1);}}); return array; } function searchStopBack(input,array,index){ var points = 0,temp; for(var i=index;i>=0;i--){ if(array[i]==")"){ points++ }else if(array[i]=="("){ if(points==0){ array.splice(i, 0, generateCode(input,"backward",array[i])); temp=array; break }else{ points--; } } if(i===0){ //IF REACHES END array.splice(i, 0, generateCode(input,"backward",array[i])); temp=array; break; } } return temp; } function searchStopForward(input,array,index){ var points = 0,temp; for(var i=index;i<=array.length;i++){ if(array[i]=="("){ points++ }else if(array[i]==")"){ if(points==0){ array.splice(i, 0, generateCode(input,"forward",array[i])); temp =array; break; }else{ points--; } } if(i==array.length){ //IF REACHES END array.push(generateCode(input,"forward",array[i])); temp=array; break; } } return temp; } function generateCode(input, direction,text){ if(input =="/"){ if(direction=="forward"){ return "
" }else{ return "
"; } }else if (input =="^"){ if(direction=="forward"){ return ''; }else{ return ''+ text; } } } //CHANGE ALGEBRAEIC LETTERE function detectAlgebra(string,next){ // var arr = string.split(/(?=\<)|(?<=\>)/); //SPLIT BUT KEEP IN var regex = /(
.*?<\/div>)|(.*?<\/span>) /; var arr= string.split(regex).filter(Boolean); arr.forEach(function(e,i){ if(e.includes("<")){ //CHECK NOT IN A SPAN OR SUP //0 }else{ var margin=""; if(next!=undefined && next.includes("^")){ margin = "margin-right:0;" }else{ margin = "margin-right:0.2em ;" } arr[i] = arr[i].replace(/[A-Za-z]/g,function(x){return "" +x+""}); } }); return arr.join(""); } //CLOSE BUTTON closeButton.click(function(){ buttonClickAudio.play(); hidePages(); invertNav(); textResize(); resetGame(); }); //INVERT THE NAVIGATION COLOURS AND TOGGLE CLOSE function invertNav(){ fullScreen.toggleClass("inverted"); soundToggle.toggleClass("inverted"); navBar.toggleClass("theme-background-dark"); closeButton.toggle(); } //FULLSCREEN TOGGLE --------------------------------------------------------------- fullScreen.click(function () { buttonClickAudio.play(); if(fullScreen.hasClass("expand-screen")) {fullScreen .removeClass("expand-screen") .addClass("reduce-screen"); TwinklGame.Utils.makeFullScreen(document.getElementById('word-mat-container')); } else{ fullScreen .removeClass("reduce-screen") .addClass("expand-screen"); TwinklGame.Utils.leaveFullScreen(); } setTimeout(function(){textResize();changeTextOfUnloaded();},100) }); $(document).on('webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange', function () { isFullscreen = !isFullscreen; resizeScreen(); textResize(); changeTextOfUnloaded(); }); //SOUND TOGGLE ----------------------------------------------------------------------- soundToggle.click(function () { buttonClickAudio.play(); if(soundToggle.hasClass("sound-off")) {soundToggle .removeClass("sound-off") .addClass("sound-on"); Howler.mute(true); }else{ soundToggle .removeClass("sound-on") .addClass("sound-off"); Howler.mute(false); } }); //CHECK IF TEXT OVERFLOWS---------------------------------------------------------------- function testFontSize(e, s) { e.css( "font-size", s + ("px")); var size = e.css('font-size'); //GETS FONT SIZE size = parseInt(size, 10); //REMOVE PX //WHILE TEXT OVERFLOWS ELEMENT REDUCE TEXT SIZE for(;e.get(0).offsetHeight